const express = require('express')
const router = express.Router()
const cartModel = require('../../db/cart')
const menuModel = require('../../db/menu')
const orderModel = require('../../db/order')

/*
支付：
    请求方式 - post
    请求路径 - /front/api/orders/create
    响应数据：
        成功或失败
*/
router.post('/create', (req, res) => {
    // 接收结算的所有购物车数据的id  ->  123465,456789
    // 接收结算的时候选择的进食方式 -> 堂食/打包
    // 接收结算的时候总价
    let {ids, mode, totalprice, userid} = req.body
    ids = ids.split(',') // 分割为一个数组
    // 到购物车表中查询所有的购物车数据
    cartModel.find({_id: {$in: ids}}, (err, docs) => {
        if(err) {
            throw new Error(err)
        }
        console.log(11, docs) // [{_id: XX, menuid: xxx, userid:xxx,num:xx, ...}, {}]
        // 从数组中获取到所有的商品id
        let menuids = docs.map(item => item.menuid) // [商品id, 商品id]
        console.log(menuids);
        // 通过多个商品id查询所有商品数据
        menuModel.find({_id: {$in: menuids}}, (err, docs) => {
            if(err) {
                throw new Error(err)
            }
            console.log(docs); // [{_id: XX, name: xxx, price:xxx,imgpath:xx, ...}, {}]
            // 获取第一个商品的名称
            console.log(docs);
            let menuname = docs[0].name
            // 生成订单号
            let orderno = +new Date() + Math.floor(Math.random() * 899999) + 100000
            // 定义订单状态
            let status = '已付款'
            // 取餐码 - 今天的第几个
            // 生成今天的开始时间戳和今天的结束时间戳
            let now = +new Date() // 当前时间戳
            let day = now / 1000 / 60 / 60 / 24
            let start = Math.floor(day) * 1000 * 60 * 60 * 24
            let end = Math.ceil(day) * 1000 * 60 * 60 * 24
            // console.log(start,end); // 1678492800000 1678579200000
            // 查询订单表，找到在这个时间段的最后一个数据
            orderModel.find({time: {$gt: start, $lt: end}}, (err, docs) => {
                if(err) {
                    throw new Error(err)
                }
                // 判断查询出来的数据数量
                if(docs.length) {
                    // 取餐码是数量 + 1
                    code = docs.length + 1
                    // 不够4位数，前面补0
                    if(code < 10) {
                        code = '000' + code
                    } else if(code < 100) {
                        code = '00' + code
                    } else if(code < 1000) {
                        code = '0' + code
                    }
                } else {
                    // 如果今天还没有数据，取餐码为1
                    code = '0001'
                }
                // 将数据添加到订单表
                orderModel.insertMany({
                    orderno,
                    mode,
                    menuname,
                    code,
                    totalprice,
                    status,
                    userid
                }, (err, docs) => {
                    if(err) {
                        throw new Error(err)
                    }
                    // 删除购物车表的数据
                    cartModel.deleteMany({_id: {$in: ids}}, (err, docs) => {
                        if(err) {
                            throw new Error(err)
                        }
                        res.json({
                            error_code: 0,
                            msg: '支付成功！'
                        })
                    })
                })
            })
        })
    })
})
/*
订单：
    请求方式 - get
    请求路径 - /front/api/orders/getall
    响应数据：
        所有订单数据 - [{}, {}]
*/
router.get('/getall/:userid', (req, res) => {
    let {userid} = req.params // 获取用户id
    // 获取当前用户所有的订单数据
    orderModel.find({userid}, (err, docs) => {
        if(err) {
            throw new Error(err)
        }
        res.json({
            error_code: 0,
            msg: '获取订单成功！',
            data: docs
        })
    })
    // res.send('获取所有的订单')
})



module.exports = router